#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<string.h>

# define qtde 65200
# define ALFABETO 26

typedef struct {
    char pal[30];
}palav;

// variaveis globais
palav dicionario[qtde];
unsigned ind_max = 0;
int nachadas = 0;
int MAXPALAVRA = 2;

//funcao que gera uma palavra aleatoria
void gera_aleatorio(char *word){
	int i = 0;

	for(i=0;i<MAXPALAVRA; i++){
		word[i] = (rand()%ALFABETO) + 97;
	}
	word[MAXPALAVRA]='\0';
}

//funcao q busca uma palavra no dicionario
int busca_palavra(char *palavra){
	int i = 0;
	//printf("entrada %s\n", palavra);
	for(i=0;i<ind_max; i++){
	    //printf("dicionario[%d].pal =  %s\n",i, dicionario[i].pal);
		if(strcmp(dicionario[i].pal, palavra) == 0){
			return i;
		}
	}
	return -1;
}

//main
int main (int argc, char *argv[]) {

	FILE * arqIn;
	clock_t fim, inicio;
	double tempo;
	int j;
	int encontrada[qtde];

	char word[20];
	unsigned i=0;

	char *dbin = calloc(100,sizeof(char));
	srand(time(NULL));

	inicio = clock();
	//loop para processar os arquivos com palavras
	for(j=2; j<4 ; j++){
	    ind_max=0;
	    nachadas =0;
	    //escreve o nome do arquivo em dbin
	    sprintf(dbin,"0%d.txt", j);
        if(!(arqIn = fopen(dbin, "r"))){
            printf("Erro ao abrir o arquivo!\n\n");
            return -1;
        }

        printf("Preciso encontrar:\n");
        while (!feof(arqIn)){
            //le palavras do dicionario
            fscanf(arqIn, "%s\n", dicionario[ind_max].pal);
            printf("Word = %s\n", dicionario[ind_max].pal);
            //incrementa numero de palavras do dicionario
            ind_max++;
        }
        printf("Quantidade de palavras = %d\n", ind_max);

        fclose(arqIn);

        //inicia vetor de palavras encontradas (0 nao achou e 1 achou)
        for(i=0;i<ind_max;i++){
            encontrada[i] = 0;
        }
        for(i=ind_max;i<qtde;i++){
            encontrada[i] = -1;
        }

        int continua = 1;
            //geracao e comparacao das palavras
            while(continua){
                //gera uma palavra aleatoria
                gera_aleatorio(word);
                //busca a palavra gerada no dicionario, se achar,
                //retorna o indice da palavra no dicionario
                int indice = busca_palavra(word);

                if(indice >= 0){//se encontrou a palavra no dicionario
                    if(encontrada[indice] == 0){//se a palavra ainda nao foi encontrada
                        printf("\nEncontrei %s\n\n", word);
                        encontrada[indice] = 1;//muda status para encontrada
                        nachadas++;//incrementa numero de achadas
                    }
                    if(nachadas == ind_max){//se achou todas as palavras de tamanho atual, termina e aumenta o tamanho
                        MAXPALAVRA++;
                        continua = 0;//para sair do loop
                    }
                }
                fim = clock();
                tempo =((fim-inicio)/(CLOCKS_PER_SEC/1000));
                if(tempo > 10000){//se estourou o tempo e ms, termina o processo
                    printf("tempo = %f\n", tempo);
                    return 0;
                }
            }
	}
	//exibe o tempo total gasto
	fim = clock();
    tempo =((fim-inicio)/(CLOCKS_PER_SEC/1000));
    printf("tempo = %f\n", tempo);


	return 0;
}
